%% Infra-LaPS - GATTIC
%
%
% Autor: Vitoria Alencar
% e-mail: vads17 gmail dot com
% versão: 0.5
%
% %
%\documentclass[compress]{beamer}
\providecommand\akCreateHandouts{}
\ifdefined\akCreateHandouts
\documentclass[t,handout]{beamer}
\else
\documentclass[hyperref={pdfpagelabels=false}]{beamer}
\fi

\usepackage[utf8]{inputenc}
\usepackage[brazil]{babel}
\usepackage{subfigure}
\usepackage{graphicx}
\usepackage{listings}
\usepackage{pgfpages}
\usepackage{ifpdf}
\usepackage{multimedia}

\ifpdf
    \usepackage{epstopdf}
\fi

\usepackage{beamerthemesplit}
\setbeamertemplate{footline}[frame number]
\setbeamertemplate{navigation symbols}{}

\mode<presentation> {\usetheme{Warsaw} \setbeamercovered{transparent}}

%\input{../../public/definitions}
%\usetheme{Szeged}
%\usetheme{shadow}

%\usecolortheme{beaver}

%\usefonttheme{professionalfonts}

% Não altere as configurações acima, que determinam a aparência
% e a fonte de sua palestra. Caso altere, estará infringindo a
% padronização do GATTIC

%inserir codido



\usepackage{ae}
\setbeamersize{text margin left=1cm}

\institute{Engenharia da Computação -- UFPA}


\author{Emily Araujo,Silvia Sena,Vitoria Alencar, Wana Batista e Augusto Cezar}

%\author{hauhauhau}
\date{\today}
\title[Arquitetura e Organização de Computadores]{Arquitetura e Organização de Computadores}
\subtitle[Montandor e Emulador para PIC16F628A]{Montandor e Emulador para PIC16F628A}

%Início do Documenteo
%
\begin{document}
    \frame[plain]{\titlepage}
    \section[Sumario]{}
    \tableofcontents
    \section[Intruduçao]{Introdução}
        \begin{frame}{Introdução}
            Intruducao.
        \end{frame}

    \newpage
    \section{Conceito}
        \begin{frame}{Montador}
            \begin{itemize}
                \item  Programar em linguagem de máquina é uma tarefa tediosa e suscetível a erros.
                \item Idéia: programar em uma linguagem simbólica e fazer uma ferramenta para converter o programa nesta linguagem para linguagem de máquina.
                \item Linguagem simbólica: Linguagem de montagem (assembly).
                \item Ferramenta: Montador
            \end{itemize}
        \end{frame}

        \begin{frame}{Montador}
            \begin{itemize}
                \item O montador converte o código em linguagem de montagem para linguagem de máquina.
                \item Linguagem simbólica =$>$ binário
                \item Programa em linguagem de montagem possui:
                    \begin{itemize}
                        \item Rótulos;
                        \item Instruções do processador;
                        \item Diretivas de montagem;
                        \item Comentário, etc.
                    \end{itemize}
            \end{itemize}
        \end{frame}

        \begin{frame}{Rótulos, Instruções, Diretivas}
            \begin{itemize}
                \item Rótulos são anotações no código que serão convertidas em endereços pelo montador. A sintaxe de um rótulo é uma palavra terminada com o caractere ";"
                \item Instruções correspondem às instruções do pic.
                    \\Exemplo.
                    \\MOVLW B'0000011'
                    \\MOVWF TRISA
                \item Diretivas de montagem são comandos para coordenar a montagem. São executados em tempo de montagem.
                    \\Exemplo.
                    \\ORG 0x00
            \end{itemize}
        \end{frame}

        \begin{frame}{Montagem}
            \begin{itemize}
                \item Podemos implementar o processo de montagem em passo:
                    \begin{enumerate}
                        \item Computar os endereços dos rótulos.
                            \\Verificar a correção das instruções, se encontrar incorreção, o montador registra  e o  processo é interrompido. Se as instruções estiverem corretas, o montador gera as tabelas de simbolos.

                            A cada entrada da tabela, o montador atribui o valor binário do codigo de operação, além de outro dados, como o tamanho de instrução e seus operandos, bem com a posição relativa à instrução inicial do programa.
                        \item Gerar o mapa de memória, ou arquivo binário.
                            \\O montador realiza a criação do código objeto, completando todas as entradas das tabelas
                    \end{enumerate}
            \end{itemize}
        \end{frame}


    \section{Sobre o trabalho}
        \begin{frame}{Primeira parte}
            \begin{itemize}
                    \item Desenvolver um montador ultilizando a linguagem c. Essa linguagem foi escolhido devidos ja visto a essa linguagem no inicio do curso da engenharia da computação.
            \end{itemize}
        \end{frame}

    \section{Codigo}
    \begin{frame}{As funções do montador}{}
      %      A(n) = número de comparações no melhor caso.
        \begin{itemize}
            \item funcao main();
                \\Faz um unica chamada da função montador() dentro do while(), que o while é um loop infinito que só termina se a funcao montador() retorna diferente de 1.
        \end{itemize}
    \end{frame}

    \begin{frame}{função montador()}
        \begin{itemize}
            \item A função montador(), é onde ocorre a interação com o usuário,são tres  opções:
                \begin{enumerate}
                    \item Carregar o arquivo;
                    \item Gerar arquivo objeto;
                    \item Sair;
                \end{enumerate}
            \item temos uma função de controle switch(), que testa as entradas do usuário.
            \item case 1 - Pede o nome do arquivo asm que o usuario gostaria de ler e  chama a função  preencher$_tabelas(nome_arquivo_asm)$, passando como paramentro o nome do arquivo asm.
        \end{itemize}
    \end{frame}
    \begin{frame}{função montador()}
        \begin{itemize}
            \item case 2 - O usuario entre com o nome do arquivo objeto que gostaria de gerar e o nome do arquivo asm gostaria de ler.
                E chama a funcao gerar$ arquivo(nome arquivo montador, nome arquivo asm)$ passando como o paramentro o nome do arquivo que vai gerar e o nome do arquivo asm vai ler.
            \item case 3 - Exibe a mensagem de sair e chama a função exit(1);
        \end{itemize}
    \end{frame}

    \begin{frame}{Função preencher$_$tabelas()}
        \begin{itemize}
            \item Abre o arquivo asm em modo somente de leitura, e faz o teste se o arquivo for nulo então exibe a mensagem de erro e finaliza.
            \item rewind posiciona no começo do arquivo.
            \item A funcao while  enquanto não chegar o final do arquivo continua a leitura, fgests pega linha por linha e armazena na variavel line.
            \item Alguns testes são realizados, se a linha for branco pula, se a linha for comentario ignora. Se encontrar a palavra "end" entao chegou no final do arquivo entao fecha o arquivo e retorna  que ocorreu o esperado.
        \end{itemize}
    \end{frame}

    \begin{frame}{Função preencheri$_$tabelas()}
        \begin{itemize}
            \item Fazendo leitura linha por linha faz os seguintes teste:
            \item Verifica se a palavra encontrada é uma instrução se for instrução, então incrementa contador de posição de acordo com o tamanho da instrução no opcode.
            \item se não só pode ser declaração de variavel, verifica na tabela, se não encontrar na tabela, adiciona! se econtrar erro exibir a mensagem de variavel declarado de forma errada ou não existir.
            \item De acordo com os delimitadores declarados faz cortes, indo para a proxima linha, assim gerando tabela de mnemonicos e instruções. Terminando a função fechar o arquivo.
        \end{itemize}
    \end{frame}

    \begin{frame}{Função gerar-arquivo()}
        \begin{itemize}
            \item A função gerar arquivo abre um arquivo onde será gravado o seu objeto, em forma de escrita.
            \item Abre o arquivo asm em forma de leitura. Faz testes se os dois arquivos foram aberto sem erros, se houver erro então apresenta a mensagem de erro e finaliza.
            \item a funcao while() pecorre linha por linha até chegar no final do arquivo.
            \item Faz o teste, se a linha contiver end  finaliza.
            \item Se na linha contém instrução,  grava a instrução e assim incrementa no contador de posições de acordo com tamanho da instrução.
            \item Se for variavel, compara todas as variaveis predefinidas e grava o valor dela.
            \item Terminando todos os testes, fechar o arquivo asm e o arquivo objeto.
        \end{itemize}
    \end{frame}
    \section{Conclusao}
    \begin{frame}{Conclusao}
    \end{frame}

    \newpage
    \section{Biografia}
    \begin{frame}{Biografia}{Referencia}
    \begin{itemize}
        \item    Desvebrando o PIC.
    \end{itemize}
    \end{frame}
\end{document}
